
//  HMCellViewModel.swift
//  GuoGuo
//
//  Created by 艾小新 on 16/8/8.
//  Copyright © 2016年 xiaoxin. All rights reserved.
//  专门处理cell 给cell提供数据   HMHomeCellTavleVieCell   --> HMCellViewModel --> HMStatus

import UIKit

class HMCellViewModel: NSObject {
    
    // 这里计算的是每个cell的 应该显示的值，所以模型应该是HMStatus 设置在didSet
    var status: HMStatus?
    var verifiedImage: UIImage?
    // 会员图标
    var membershipImage: UIImage?
    // 转发数量
    var repostsCountStr: String?
    // 评论数量
    var commentsCountStr: String?
    // 点赞数量
    var attitudesCountStr: String?
    // 原创微博
    var retweetedText: String?
    
    
    // 计算微博来源是什么
    var source_Sum: String?
    
    // 计算微博创建时间
    var created_Sum: String?    
    init(status: HMStatus) {
        
        super.init()
        self.status = status
        
        // 设置认证
        // 拿到 status 里面的认证类型,去生成对应的认证图标
        
        let verifiedType = status.user?.verified ?? -1
        
        switch verifiedType {
        case 1:
            verifiedImage = UIImage(named: "avatar_vip")
        case 2,3,5:// 企业认证
            verifiedImage = UIImage(named: "avatar_enterprise_vip")
        case 220: // 达人
            verifiedImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedImage = nil
        }
        
        // 设置会员图标
        if let mbrank = status.user?.mbrank where mbrank > 0 {
            membershipImage = UIImage(named: "common_icon_membership_level\(mbrank)")
        }
        
        
        repostsCountStr = stringWithCount(status.reposts_count, defaultString: "转发")
        commentsCountStr = stringWithCount(status.comments_count, defaultString: "评论")
        attitudesCountStr = stringWithCount(status.attitudes_count, defaultString: "赞")
        
        // 计算转发微博的内容
        // 判断如果有转发微昵称和转发微博内容的话,就去设置转发微博内容
        if let screenName = status.retweeted_status?.user?.screen_name, text = status.retweeted_status?.text {
            retweetedText = "@\(screenName):\(text)"
        }else{
            retweetedText = "该微博已被删除,看什么看!"
        }
        
        // 计算 微博来源
        Letsource_Sum()
        
        // 计算 微博时间
        LetCreate_Sum()
        
    
}
    // 微博来源
    private func Letsource_Sum() {
        // "<a href=\"http://app.weibo.com/t/feed/2ilxcM\" rel=\"nofollow\">小米Note</a>"
        guard var str = status?.source else {
            return
        }
        
        if let start = str.rangeOfString("\">")?.endIndex{
            if let end = str.rangeOfString("</")?.startIndex {
                str = "来自:\(str.substringWithRange(start..<end))"
                
            }
        }
        source_Sum = str
        
    }
    
    // 微博时间
    private func LetCreate_Sum() {
        
        guard let str = status?.created_at else {
            return
        }
        
        let fm = NSDateFormatter()
        fm.locale = NSLocale(localeIdentifier: "en")
        
        // Thu Aug 11 17:07:49 +0800 2016
        guard let date = NSDate.sinaDateWithString(str) else {
            return
        }
        
        // 2016-08-11 09:17:27 +0000
        
        let calendar = NSCalendar.currentCalendar()
        
        if isDateInThisYear(date) {
            // 不是今年,显示 2014-03-10
            fm.dateFormat = "yyyy-MM-dd"
            // 已这个格式来取
            created_Sum = fm.stringFromDate(date)
        }else {
            // 判断是否是今天
            if calendar.isDateInToday(date) {
                // 取到微博创建时间与当前时间的秒差值
                let result = -date.timeIntervalSinceNow
                if result < 60 {
                    created_Sum = "刚刚"
                }else if result < 3600 {
                    created_Sum = "\(Int(result/60))分钟前"
                }else{
                    created_Sum = "\(Int(result/3600))小时前"
                }
            }else if calendar.isDateInYesterday(date) {
                // 是昨天
                fm.dateFormat = "昨天 HH:mm"
                created_Sum = fm.stringFromDate(date)
            }else{
                // 其他,显示 03-09 20:20
                fm.dateFormat = "MM-dd HH:mm"
                created_Sum = fm.stringFromDate(date)
            }
            
            
            
            
        }
    
    
    }
    
    /// 通过数量计算该数量显示的文字
    ///
    /// - parameter count:         数量
    /// - parameter defaultString: 默认要显示文字(count=0的时候)
    ///
    /// - returns:
    private func stringWithCount(count: Int, defaultString: String) -> String {
        /**
         以转发来说,如果有转发数据,那么就显示对应数量
         - 如果低于10000 --> 直接显示数字
         - 如果低于10900 --> 显示1万
         - 如果高于11000(12003) --> 显示 1.x 万
         */
        if count < 10000 {
            if count == 0 {
                return defaultString
            }else{
                return "\(count)"
            }
        }else{
            let result = CGFloat(count / 1000) / 10
            let resultStr = "\(result)万"
            
            if resultStr.containsString(".0") {
                return resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
            }
            return resultStr
        }
    }
    
    /// 计算 target 是否是今年
    ///
    /// - parameter target:
    func isDateInThisYear(target: NSDate) -> Bool {
        // 首页先取出当前时间
        let currentDate = NSDate()
        // 怎么对比 ??? 因为我们只需要判断是否是今年,所以我们只需要将年份的字符串给格式化出来进行对比就可以了
        
        let fm = NSDateFormatter()
        fm.locale = NSLocale(localeIdentifier: "en")
        // 只取年
        fm.dateFormat = "yyyy"
        
        let currentDateYearStr = fm.stringFromDate(currentDate)
        let targetDateYearStr = fm.stringFromDate(target)
        
        return currentDateYearStr == targetDateYearStr
    }

    


}
